
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>RabbitMQ中的组件 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>RabbitMQ中的组件 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在 RabbitMQ 中，Broker 的核心职责是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Broker 是 RabbitMQ 的核心部分，负责接收、存储和转发消息。其主要功能包括：消息路由、消息存储（持久化）以及消息优先级管理。</div>
          </div>
          <div class="card-source">来源: 1. Broker（代理）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">RabbitMQ 的生产者（Producer）如何确保消息已成功送达 Broker？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">生产者可以通过启用 Confirm 模式或使用事务机制来确保消息成功到达交换机。当启用 Confirm 模式时，生产者会在消息被 Broker 成功处理后收到一个确认。</div>
          </div>
          <div class="card-source">来源: 2. Producer（生产者）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">请简述 Fanout Exchange 和 Topic Exchange 的主要区别及其各自的应用场景。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Fanout Exchange 将消息广播到所有绑定到它的队列，忽略路由键，适用于日志广播或通知推送等广播场景。Topic Exchange 则根据路由键的模式匹配（如 *.error）来分发消息，适用于需要主题匹配的场景，如新闻推送或日志过滤。</div>
          </div>
          <div class="card-source">来源: 3. Exchange（交换机）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">什么是 RabbitMQ 中的队列（Queue），它提供了哪些关键功能？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">队列是消息的存储区，消息在此等待被消费者处理。其关键功能包括：持久化（在 Broker 重启后保留消息）、支持优先级队列（影响消费顺序）以及死信队列（处理无法成功消费的消息）。</div>
          </div>
          <div class="card-source">来源: 4. Queue（队列）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">消费者（Consumer）如何控制消息接收速率以防止自身过载？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">消费者可以通过设置 prefetch 值来实现消费限流。这个值控制了消费者一次可以处理的消息数量，从而有效防止因消息过多而导致的过载问题。</div>
          </div>
          <div class="card-source">来源: 5. Consumer（消费者）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在 RabbitMQ 中，“绑定（Binding）”的作用是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">绑定是交换机和队列之间的桥梁，它通过绑定键定义了消息从交换机到队列的路由规则和路径。</div>
          </div>
          <div class="card-source">来源: 6. Binding（绑定）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">什么是虚拟主机（Virtual Host），它如何支持多租户应用场景？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">虚拟主机是逻辑上的 RabbitMQ 实例，用于资源的隔离和管理。它通过为每个租户提供独立的队列、交换机和绑定，并实现权限隔离，来支持多租户应用场景。</div>
          </div>
          <div class="card-source">来源: 7. Virtual Host（虚拟主机）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">请解释 RabbitMQ 中“连接（Connection）”与“通道（Channel）”的关系及其设计优势。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">连接是应用程序与 Broker 之间的 TCP 连接，而通道是在单个连接上复用的逻辑通道。这种设计的优势在于通过复用连接降低了创建 TCP 连接的开销，并且允许不同线程使用独立的通道，从而提高了并发处理能力。</div>
          </div>
          <div class="card-source">来源: 8. Connection（连接）与 Channel（通道）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">RabbitMQ 中的插件（Plugins）有什么用途？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">插件用于扩展 RabbitMQ 的功能。通过插件机制，RabbitMQ 可以支持多种高级特性（如 Shovel、Federation），并实现对 RabbitMQ 的管理和监控（如管理 UI、消息追踪、流量分析等）。</div>
          </div>
          <div class="card-source">来源: 9. Plugins（插件）</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
